package main

import "fmt"

func f1() int {
	x := 5
	defer func() {
		x++ // 修改的是局部变量 x，不是返回值
	}()
	return x // 1. 设置返回值 = 5
	// 2. 执行 defer：x = 6（但返回值已经是5）
	// 3. RET：返回 5
}

func f2() (x int) { // x 是命名返回值
	defer func() {
		x++ // 直接修改命名返回值 x
	}()
	return 5 // 1. 设置返回值 x = 5
	// 2. 执行 defer：x = 6
	// 3. RET：返回 x = 6
}
func f3() (y int) { // y 是命名返回值
	x := 5
	defer func() {
		x++ // 修改局部变量 x，不影响 y
	}()
	return x // 1. 设置返回值 y = 5
	// 2. 执行 defer：x = 6
	// 3. RET：返回 y = 5
}

func f4() (x int) { // x 是命名返回值
	defer func(x int) { // 这里 x 是参数，值传递
		x++ // 修改的是参数 x 的副本
	}(x) // 传递 x 的当前值（0）
	return 5 // 1. 设置返回值 x = 5
	// 2. 执行 defer：参数 x++（副本从0变1）
	// 3. RET：返回 x = 5
}

func main() {
	fmt.Println(f1()) // 5
	fmt.Println(f2()) // 6
	fmt.Println(f3()) // 5
	fmt.Println(f4()) // 5
	//fmt.Println(f1())

}
